package com.dg11185.nearshop.net;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;

import com.dg11185.libs.utils.file.FileUtils;
import com.dg11185.libs.utils.file.FileUtils.PathStatus;
import com.dg11185.nearshop.app.MyApplication;

/**
 * 文件缓存类 适用于仅仅从服务器获取数据的接口，提交数据或操作的接口不适用；
 * 获取的值不变的接口（如获取东莞的镇区名字），缓存时间长，为了响应时间快和节省流量，每次调用接口都是先查询缓存；
 * 获取值经常变化的接口（如获取商家列表），只有当无网络时才查询缓存，只是为了在无网络情况下保持界面的完整性；
 * 
 * 对于商家列表这种重要数据，保存一种默认情况即可
 * 
 * @author：Daibo
 * @time：2014-6-10 下午2:35:58
 */
public class FileCacheHelper {

    private String filePath = null;

    /**
     * 
     * 创建一个新的实例 FileCacheHelper.
     */
    public FileCacheHelper(String fileName) {
        StringBuilder builder = new StringBuilder();
        if (FileUtils.hasSDCard()) {
            builder.append(FileUtils.getSDCardRootPath()).append("/Android/data/")
                    .append(MyApplication.getContext().getPackageName()).append("/cache/");
        } else {
            builder.append(MyApplication.getContext().getCacheDir()).append("/");
        }
        if(fileName.contains("/")){
            int index = fileName.lastIndexOf("/")+1;
            builder.append(fileName.substring(0, index));
            fileName = fileName.substring(index);
        }
        builder.append(fileName.hashCode());
        filePath = builder.toString();
    }

    /**
     * 当前接口的缓存文件是否存在
     */
    public boolean isFileExist() {
        return FileUtils.checkFileExists(filePath);
    }

    /**
     * 当期接口缓存数据是否有效（文件不存在、文件过期无效）
     * 
     * @param timeSpan
     *            文件的有效时间，以毫秒为单位
     * @return true 数据有效; false 数据无效
     */
    public boolean isFileValid(long timeSpan) {
        if (!isFileExist()) {
            return false;
        }
        File file = new File(filePath);
        long stTime = file.lastModified();
        long enTime = System.currentTimeMillis();
        if ((enTime - stTime) < timeSpan) {
            return true;
        }
        return false;
    }

    /**
     * 获取接口缓存数据，该方法没有检查文件是否存在
     */
    public String getFileString() {
        try {
            FileInputStream stream = new FileInputStream(filePath);
            return FileUtils.readInStream(stream);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 删除缓存的数据文件
     */
    public boolean deleteFile() {
        return FileUtils.deleteFile(filePath);
    }

    /**
     * 刷新数据后写数据到缓存
     */
    public void writeToFile(String content) {
        String folderName = filePath.substring(0, filePath.lastIndexOf("/"));
        if (!FileUtils.checkFilePathExists(folderName)) {
            if (!(FileUtils.createPath(folderName) == PathStatus.SUCCESS))
                return;
        }
        FileUtils.write(filePath, content);
    }
}
